<?php
/**
* 名称：分页演示类。
* 描述：演示分页程式的基本使用方式。
*/
final class Controller_Paging extends Controller{
    /**
    * 描述：客户端使用Jquery的分页方法。
    * @access protected
    * @return void
    */
    protected function Jquery(){
        $data=$this->GetAnalogData();
        //渲染模板。
        self::$Template->Assign('data',$data);
        self::$Template->Display('paging.jquery.html');
    }

    /**
    * 描述：服务端使用Smarty分页的方法。
    * @access protected
    * @return void
    */
    protected function Smarty(){
        $data=$this->GetAnalogData();
        //获取生成完的分页代码。
        $pagerHtml=self::$Template->Pager(
            $data['Meta'],
            'preload',
            '1.html',
            Route::MakeHyperlinkCallback(
                '__SELF__',
                'class:9|type:hot|price_max:3000|price_min:5000',
                'price_max:8000|price_min:10000'
            )
        );
        //渲染模板。
        self::$Template->Assign('data',$data['Rows']);
        self::$Template->Assign('pager',$pagerHtml);
        self::$Template->Display('paging.smarty.html');
    }

    /**
    * 描述：获取模拟数据。
    * @access private
    * @return void
    */
    private function GetAnalogData(){
        //模拟传入的url参数。
        $urlArguments=array('class'=>9,'type'=>'hot','price_max'=>3000,'price_min'=>5000);
        //模拟数据之原数据行。
        $demoData=array(
            array('id'=>1,'title'=>'标题1','content'=>'内容1'),
            array('id'=>2,'title'=>'标题2','content'=>'内容2'),
            array('id'=>3,'title'=>'标题3','content'=>'内容3'),
            array('id'=>4,'title'=>'标题4','content'=>'内容4'),
            array('id'=>5,'title'=>'标题5','content'=>'内容5'),
            array('id'=>6,'title'=>'标题6','content'=>'内容6'),
            array('id'=>7,'title'=>'标题7','content'=>'内容7'),
            array('id'=>8,'title'=>'标题8','content'=>'内容8'),
            array('id'=>9,'title'=>'标题9','content'=>'内容9'),
            array('id'=>10,'title'=>'标题10','content'=>'内容10')
        );
        //模拟epdo::GetLimit方法执行后的数据结构。
        $data=array(
            'Rows'=>$demoData,
            'Meta'=>array(
                'RowCount'=>10,
                'PageSize'=>3,
                'PageCount'=>4,
                'Pagination'=>1
            )
        );
        //模拟epdo::GetLimit方法中关于page参数的处理。
        $page=Route::GetArguments('page');
        if(!is_numeric($page)||$page<1){
            $page=1;
        }
        if($page>$data['Meta']['PageCount']){
            $page=$data['Meta']['PageCount'];
        }
        $data['Rows']=array_slice(
            $demoData,
            $page*$data['Meta']['PageSize']-$data['Meta']['PageSize'],
            $data['Meta']['PageSize']
        );
        $data['Meta']['Pagination']=$page;
        //统畴数据。
        $data['UrlParameters']=$urlArguments;
        //返回数据。
        return $data;
    }
}